/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cliente.auxiliar;

import cliente.TwiterApiCliente.TwitterApiClient;
import cliente.TwiterApiCliente.TwitterApiClientOAuth;
import cliente.domain.Status;
import cliente.domain.User;
import cliente.gui.Iface;
import java.net.URISyntaxException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author ziza
 */
public class GereOperacoes {

    private Arquivo arquivador = null;
    private Iface janela = null;
    private TwitterApiClient operacao = null;

    public GereOperacoes() {
    }

    public Arquivo getArquivador() {
        return arquivador;
    }

    public void setArquivador(Arquivo arquivador) {
        this.arquivador = arquivador;
    }

    public Iface getJanela() {
        return janela;
    }

    public void setJanela(Iface janela) {
        this.janela = janela;
    }

    public TwitterApiClient getOperacao() {
        return operacao;
    }

    public void setOperacao(TwitterApiClient operacao) {
        this.operacao = operacao;
    }


    /*
     * -------------------------------------------------
     *      Operacoes disponiveis
     * -------------------------------------------------
     */
    public void doLogin(String un, String pw) {

        operacao.doLogintWithCredentials(un, pw);
        if (arquivador.isLog_ok()) {
            arquivador.setNickname(un);
            arquivador.setPassword(pw);
            arquivador.setErro(false);
            OpFicheiro ficheiro = new OpFicheiro(this);
            ficheiro.leBuffer();
            arquivador.arrancaBackup();
        }
    }

    public void doTweet(String tweet) {
        if (arquivador.isErro() == false) {
            operacao.doXmlRequestWithCredentialsAndLotsOfParametersAndWithAFunctionThatIsSupposedToDoStuffThatWeDontKnowYet("tweet", tweet);
        } else {
            arquivador.adicionaSms(tweet);
        }
    }

    public String[] showFollowing() {
        operacao.doXmlRequestWithCredentials("following");
        return arquivador.getFollowing();
    }

    public String[] showFollowers() {
        operacao.doXmlRequestWithCredentials("followers");
        return arquivador.getFollowers();
    }

    public Status[] showTweets() {
        doTweetRecuvery();
        operacao.doXmlRequestWithCredentials("lista_tweets");
        return arquivador.getTweets();
    }

    public void stopFollowing(String user) {
        doTweetRecuvery();
        operacao.doXmlRequestWithCredentialsAndLotsOfParametersAndWithAFunctionThatIsSupposedToDoStuffThatWeDontKnowYet("unfollow", user);
    }

    public void followSomeone(String user) {
        operacao.doXmlRequestWithCredentialsAndLotsOfParametersAndWithAFunctionThatIsSupposedToDoStuffThatWeDontKnowYet("follow", user);
    }

    public String[] search(String user) {
        operacao.doXmlRequestWithCredentialsAndLotsOfParametersAndWithAFunctionThatIsSupposedToDoStuffThatWeDontKnowYet("search", user);
        return arquivador.getNomes();
    }

    public Status[] searchTweets(String user) {
        operacao.doXmlRequestWithCredentialsAndLotsOfParametersAndWithAFunctionThatIsSupposedToDoStuffThatWeDontKnowYet("lista_tweets", user);
        return arquivador.getListaTweets();
    }

    public String[] showUserDetails(String user) {
        //operacao.doXmlRequestWithCredentialsAndLotsOfParametersAndWithAFunctionThatIsSupposedToDoStuffThatWeDontKnowYet("detalhes", user);
        if (arquivador.getPesquisa() != null) {
            User pessoa = arquivador.pesquisaUser(user);
            if (pessoa != null) {
                String[] detalhes = new String[2];
                detalhes[0] = pessoa.getName();
                detalhes[1] = pessoa.getLocation();
                return detalhes;
            }
        }
        return null;
    }

    public void doTweetRecuvery() {
        if(arquivador.isErro()==false){
            if (arquivador.getBackup() != null) {
                if (!arquivador.getBackup().isEmpty()) {
                    for(int i=0; i<arquivador.getBackup().size(); i++){
                        doTweet(arquivador.getBackup().get(i));
                    }
                    arquivador.limpaArray();
                }
            }
        }
    }

    public void doLogout() {
        if (arquivador.getBackup() != null) {
            if (!arquivador.getBackup().isEmpty()) {
                OpFicheiro ficheiro = new OpFicheiro(this);
                ficheiro.gravaBuffer(arquivador.getBackup());
                arquivador.limpaArray();
            }
        }
    }

    public void doLoginOAuth(){
        if (operacao instanceof TwitterApiClientOAuth)
            ((TwitterApiClientOAuth)operacao).oAuth();
    }

    public void finishLoginOAuth(){
        if (operacao instanceof TwitterApiClientOAuth)
            ((TwitterApiClientOAuth)operacao).continueOAuth();
    }


}
